home *** CD-ROM | disk | FTP | other *** search
/ LG Super CD / LG Super CD.iso / bitpim / bitpim-0.62-setup.exe / {app} / bitpim.exe / tempfile.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2003-11-06  |  11.0 KB  |  356 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.3)
  3.  
  4. __all__ = [
  5.     'NamedTemporaryFile',
  6.     'TemporaryFile',
  7.     'mkstemp',
  8.     'mkdtemp',
  9.     'mktemp',
  10.     'TMP_MAX',
  11.     'gettempprefix',
  12.     'tempdir',
  13.     'gettempdir']
  14. import os as _os
  15. import errno as _errno
  16. from random import Random as _Random
  17. if _os.name == 'mac':
  18.     import Carbon.Folder as _Folder
  19.     import Carbon.Folders as _Folders
  20.  
  21.  
  22. try:
  23.     import fcntl as _fcntl
  24.     _fcntl.fcntl
  25. except (ImportError, AttributeError):
  26.     
  27.     def _set_cloexec(fd):
  28.         pass
  29.  
  30.  
  31.  
  32. def _set_cloexec(fd):
  33.     flags = _fcntl.fcntl(fd, _fcntl.F_GETFD, 0)
  34.     if flags >= 0:
  35.         flags |= _fcntl.FD_CLOEXEC
  36.         _fcntl.fcntl(fd, _fcntl.F_SETFD, flags)
  37.     
  38.  
  39.  
  40. try:
  41.     import thread as _thread
  42. except ImportError:
  43.     import dummy_thread as _thread
  44.  
  45. _allocate_lock = _thread.allocate_lock
  46. _text_openflags = _os.O_RDWR | _os.O_CREAT | _os.O_EXCL
  47. if hasattr(_os, 'O_NOINHERIT'):
  48.     _text_openflags |= _os.O_NOINHERIT
  49.  
  50. if hasattr(_os, 'O_NOFOLLOW'):
  51.     _text_openflags |= _os.O_NOFOLLOW
  52.  
  53. _bin_openflags = _text_openflags
  54. if hasattr(_os, 'O_BINARY'):
  55.     _bin_openflags |= _os.O_BINARY
  56.  
  57. if hasattr(_os, 'TMP_MAX'):
  58.     TMP_MAX = _os.TMP_MAX
  59. else:
  60.     TMP_MAX = 10000
  61. template = 'tmp'
  62. tempdir = None
  63. _once_lock = _allocate_lock()
  64.  
  65. class _RandomNameSequence:
  66.     characters = 'abcdefghijklmnopqrstuvwxyz' + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + '0123456789-_'
  67.     
  68.     def __init__(self):
  69.         self.mutex = _allocate_lock()
  70.         self.rng = _Random()
  71.         self.normcase = _os.path.normcase
  72.  
  73.     
  74.     def __iter__(self):
  75.         return self
  76.  
  77.     
  78.     def next(self):
  79.         m = self.mutex
  80.         c = self.characters
  81.         choose = self.rng.choice
  82.         m.acquire()
  83.         
  84.         try:
  85.             letters = [ choose(c) for dummy in '123456' ]
  86.         finally:
  87.             m.release()
  88.  
  89.         return self.normcase(''.join(letters))
  90.  
  91.  
  92.  
  93. def _candidate_tempdir_list():
  94.     dirlist = []
  95.     for envname in ('TMPDIR', 'TEMP', 'TMP'):
  96.         dirname = _os.getenv(envname)
  97.         if dirname:
  98.             dirlist.append(dirname)
  99.             continue
  100.     
  101.     if _os.name == 'mac':
  102.         
  103.         try:
  104.             fsr = _Folder.FSFindFolder(_Folders.kOnSystemDisk, _Folders.kTemporaryFolderType, 1)
  105.             dirname = fsr.as_pathname()
  106.             dirlist.append(dirname)
  107.         except _Folder.error:
  108.             pass
  109.         except:
  110.             None<EXCEPTION MATCH>_Folder.error
  111.         
  112.  
  113.     None<EXCEPTION MATCH>_Folder.error
  114.     if _os.name == 'riscos':
  115.         dirname = _os.getenv('Wimp$ScrapDir')
  116.         if dirname:
  117.             dirlist.append(dirname)
  118.         
  119.     elif _os.name == 'nt':
  120.         dirlist.extend([
  121.             'c:\\temp',
  122.             'c:\\tmp',
  123.             '\\temp',
  124.             '\\tmp'])
  125.     else:
  126.         dirlist.extend([
  127.             '/tmp',
  128.             '/var/tmp',
  129.             '/usr/tmp'])
  130.     
  131.     try:
  132.         dirlist.append(_os.getcwd())
  133.     except (AttributeError, _os.error):
  134.         dirlist.append(_os.curdir)
  135.  
  136.     return dirlist
  137.  
  138.  
  139. def _get_default_tempdir():
  140.     namer = _RandomNameSequence()
  141.     dirlist = _candidate_tempdir_list()
  142.     flags = _text_openflags
  143.     for dir in dirlist:
  144.         if dir != _os.curdir:
  145.             dir = _os.path.normcase(_os.path.abspath(dir))
  146.         
  147.         for seq in xrange(100):
  148.             name = namer.next()
  149.             filename = _os.path.join(dir, name)
  150.             
  151.             try:
  152.                 fd = _os.open(filename, flags, 384)
  153.                 fp = _os.fdopen(fd, 'w')
  154.                 fp.write('blat')
  155.                 fp.close()
  156.                 _os.unlink(filename)
  157.                 del fp
  158.                 del fd
  159.                 return dir
  160.             continue
  161.             except (OSError, IOError):
  162.                 e = None
  163.                 if e[0] != _errno.EEXIST:
  164.                     break
  165.                 
  166.                 e[0] != _errno.EEXIST
  167.             
  168.  
  169.         
  170.     
  171.     raise IOError, (_errno.ENOENT, 'No usable temporary directory found in %s' % dirlist)
  172.  
  173. _name_sequence = None
  174.  
  175. def _get_candidate_names():
  176.     global _name_sequence
  177.     if _name_sequence is None:
  178.         _once_lock.acquire()
  179.         
  180.         try:
  181.             if _name_sequence is None:
  182.                 _name_sequence = _RandomNameSequence()
  183.         finally:
  184.             _once_lock.release()
  185.  
  186.     
  187.     return _name_sequence
  188.  
  189.  
  190. def _mkstemp_inner(dir, pre, suf, flags):
  191.     names = _get_candidate_names()
  192.     for seq in xrange(TMP_MAX):
  193.         name = names.next()
  194.         file = _os.path.join(dir, pre + name + suf)
  195.         
  196.         try:
  197.             fd = _os.open(file, flags, 384)
  198.             _set_cloexec(fd)
  199.             return (fd, file)
  200.         continue
  201.         except OSError:
  202.             e = None
  203.             if e.errno == _errno.EEXIST:
  204.                 continue
  205.             
  206.             raise 
  207.             continue
  208.         
  209.  
  210.     
  211.     raise IOError, (_errno.EEXIST, 'No usable temporary file name found')
  212.  
  213.  
  214. def gettempprefix():
  215.     return template
  216.  
  217. tempdir = None
  218.  
  219. def gettempdir():
  220.     global tempdir
  221.     if tempdir is None:
  222.         _once_lock.acquire()
  223.         
  224.         try:
  225.             if tempdir is None:
  226.                 tempdir = _get_default_tempdir()
  227.         finally:
  228.             _once_lock.release()
  229.  
  230.     
  231.     return tempdir
  232.  
  233.  
  234. def mkstemp(suffix = '', prefix = template, dir = None, text = False):
  235.     if dir is None:
  236.         dir = gettempdir()
  237.     
  238.     if text:
  239.         flags = _text_openflags
  240.     else:
  241.         flags = _bin_openflags
  242.     return _mkstemp_inner(dir, prefix, suffix, flags)
  243.  
  244.  
  245. def mkdtemp(suffix = '', prefix = template, dir = None):
  246.     if dir is None:
  247.         dir = gettempdir()
  248.     
  249.     names = _get_candidate_names()
  250.     for seq in xrange(TMP_MAX):
  251.         name = names.next()
  252.         file = _os.path.join(dir, prefix + name + suffix)
  253.         
  254.         try:
  255.             _os.mkdir(file, 448)
  256.             return file
  257.         continue
  258.         except OSError:
  259.             e = None
  260.             if e.errno == _errno.EEXIST:
  261.                 continue
  262.             
  263.             raise 
  264.             continue
  265.         
  266.  
  267.     
  268.     raise IOError, (_errno.EEXIST, 'No usable temporary directory name found')
  269.  
  270.  
  271. def mktemp(suffix = '', prefix = template, dir = None):
  272.     if dir is None:
  273.         dir = gettempdir()
  274.     
  275.     names = _get_candidate_names()
  276.     for seq in xrange(TMP_MAX):
  277.         name = names.next()
  278.         file = _os.path.join(dir, prefix + name + suffix)
  279.         if not _os.path.exists(file):
  280.             return file
  281.             continue
  282.     
  283.     raise IOError, (_errno.EEXIST, 'No usable temporary filename found')
  284.  
  285.  
  286. class _TemporaryFileWrapper:
  287.     
  288.     def __init__(self, file, name):
  289.         self.file = file
  290.         self.name = name
  291.         self.close_called = False
  292.  
  293.     
  294.     def __getattr__(self, name):
  295.         file = self.__dict__['file']
  296.         a = getattr(file, name)
  297.         if type(a) != type(0):
  298.             setattr(self, name, a)
  299.         
  300.         return a
  301.  
  302.     if _os.name != 'nt':
  303.         unlink = _os.unlink
  304.         
  305.         def close(self):
  306.             if not (self.close_called):
  307.                 self.close_called = True
  308.                 self.file.close()
  309.                 self.unlink(self.name)
  310.             
  311.  
  312.         
  313.         def __del__(self):
  314.             self.close()
  315.  
  316.     
  317.  
  318.  
  319. def NamedTemporaryFile(mode = 'w+b', bufsize = -1, suffix = '', prefix = template, dir = None):
  320.     if dir is None:
  321.         dir = gettempdir()
  322.     
  323.     if 'b' in mode:
  324.         flags = _bin_openflags
  325.     else:
  326.         flags = _text_openflags
  327.     if _os.name == 'nt':
  328.         flags |= _os.O_TEMPORARY
  329.     
  330.     (fd, name) = _mkstemp_inner(dir, prefix, suffix, flags)
  331.     file = _os.fdopen(fd, mode, bufsize)
  332.     return _TemporaryFileWrapper(file, name)
  333.  
  334. if _os.name != 'posix' or _os.sys.platform == 'cygwin':
  335.     TemporaryFile = NamedTemporaryFile
  336. else:
  337.     
  338.     def TemporaryFile(mode = 'w+b', bufsize = -1, suffix = '', prefix = template, dir = None):
  339.         if dir is None:
  340.             dir = gettempdir()
  341.         
  342.         if 'b' in mode:
  343.             flags = _bin_openflags
  344.         else:
  345.             flags = _text_openflags
  346.         (fd, name) = _mkstemp_inner(dir, prefix, suffix, flags)
  347.         
  348.         try:
  349.             _os.unlink(name)
  350.             return _os.fdopen(fd, mode, bufsize)
  351.         except:
  352.             _os.close(fd)
  353.             raise 
  354.  
  355.  
  356.